﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace projetoFinal.pages.administracao.nivelAcesso
{
    public partial class dados : baseWebPage
    {
        protected void Page_Init(object sender, EventArgs e)
        {
            base.Modulo = operaModulo.buscar("ADMINISTRAÇÃO - NÍVEL DE ACESSO");
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                //Arruma o diretório das imagens
                menuTopo.setDiretorio("../");
                menuEsquerda.setDiretorio("../");

                lblTitulo.Text = "Nível de acesso";
                btnSalvar.Attributes.Add("onclick", "javascript:return validateForm('frmDados');");

                Int64 id = 0;
                if (Request["id"] != null)
                {
                    id = Int64.Parse(Request["id"].ToString());
                    projetoFinal.nivelAcesso t = operaNivelAcesso.buscar(id);
                    //Busca os dados e preenche conforme o que está no banco
                    txtCodigo.Value = t.CodNivelAcesso.ToString();
                    txtDescricao.Value = t.Descr.ToString();

                    bind(id);

                    //No caso de edição
                    if (!base.CanUpdate)
                    {
                        this.btnSalvar.Visible = false;
                        this.information.Visible = true;
                        this.lblTitleInformation.Text = "Aviso!";
                        this.lblMessageInformation.Text = "Você não possui permissão para editar registros!";
                    }
                }
                else
                {
                    bind(0);

                    //No caso de inclusão
                    if (!base.CanCreate)
                    {
                        this.btnSalvar.Visible = false;
                        this.information.Visible = true;
                        this.lblTitleInformation.Text = "Aviso!";
                        this.lblMessageInformation.Text = "Você não possui permissão para incluir registros!";
                    }
                }
            }
        }
        private List<projetoFinal.nivelAcessoModulo> geraListaNivelAcesso()
        {
            List<projetoFinal.modulo> lstModulo = operaModulo.listar("", "", 0);
            List<projetoFinal.nivelAcessoModulo> lstNivelAcesso = new List<nivelAcessoModulo>(lstModulo.Count);
            for(int i = 0; i < lstModulo.Count; i++)
            {
                lstNivelAcesso.Add(new nivelAcessoModulo(0, new projetoFinal.nivelAcesso(), (modulo)lstModulo[i], false, false, false, false));
            }
            return lstNivelAcesso;
        }
        private void bind(Int64 idNivelAcesso)
        {
            List<projetoFinal.nivelAcessoModulo> lstNivelAcesso = null;
            if (idNivelAcesso != 0)
            {
                lstNivelAcesso = operaNivelAcessoModulo.listar(" codNivelAcesso ", idNivelAcesso.ToString(), 1);
            }
            else
            {
                lstNivelAcesso = geraListaNivelAcesso();
                
            }
            tblListagem.Visible = true;
            tblListagem.DataSource = lstNivelAcesso;
            tblListagem.DataBind();
        }
        protected void tblListagem_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
            {
                Literal lblModulo = (Literal)e.Item.FindControl("lblModulo");

                HtmlInputHidden hdnModulo = (HtmlInputHidden)e.Item.FindControl("hdnModulo");
                HtmlInputHidden hdnCodNivelAcessoModulo = (HtmlInputHidden)e.Item.FindControl("hdnCodNivelAcessoModulo");

                HtmlInputCheckBox chkRead = (HtmlInputCheckBox)e.Item.FindControl("chkRead");
                HtmlInputCheckBox chkCreate = (HtmlInputCheckBox)e.Item.FindControl("chkCreate");
                HtmlInputCheckBox chkUpdate = (HtmlInputCheckBox)e.Item.FindControl("chkUpdate");
                HtmlInputCheckBox chkDelete = (HtmlInputCheckBox)e.Item.FindControl("chkDelete");

                projetoFinal.nivelAcessoModulo o = (projetoFinal.nivelAcessoModulo)e.Item.DataItem;

                if ((lblModulo != null) && (hdnCodNivelAcessoModulo != null) && (hdnModulo != null) && (chkRead != null) && (chkCreate != null) && (chkUpdate != null) && (chkDelete != null))
                {
                    hdnModulo.Value = o.Modulo.CodModulo.ToString();
                    hdnCodNivelAcessoModulo.Value = o.CodNivelAcessoModulo.ToString();
                    lblModulo.Text = o.Modulo.Descr.ToString();
                    
                    chkRead.Checked = o.Read;
                    chkCreate.Checked = o.Create;
                    chkUpdate.Checked = o.Update;
                    chkDelete.Checked = o.Delete;
                }
            }
        }
        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            projetoFinal.nivelAcesso objNivelAcesso = null;
            if (Request["id"] != null)
            {
                objNivelAcesso = operaNivelAcesso.buscar(Int64.Parse(Request["id"].ToString()));
                objNivelAcesso.Descr = txtDescricao.Value;

                //Edição
                int cont = operaNivelAcesso.editar(objNivelAcesso);
                if (cont > 0)
                {
                    modulo objModulo = null;
                    objNivelAcesso = operaNivelAcesso.listar("descr", txtDescricao.Value, 1)[0];
                    nivelAcessoModulo objNivelAcessoModulo = null;

                    HtmlInputCheckBox chkRead = null;
                    HtmlInputCheckBox chkCreate = null;
                    HtmlInputCheckBox chkUpdate = null;
                    HtmlInputCheckBox chkDelete = null;

                    foreach (DataListItem item in tblListagem.Items)
                    {
                        objModulo = operaModulo.buscar(Int64.Parse(((HtmlInputHidden)item.FindControl("hdnModulo")).Value));

                        chkRead = (HtmlInputCheckBox)item.FindControl("chkRead");
                        chkCreate = (HtmlInputCheckBox)item.FindControl("chkCreate");
                        chkUpdate = (HtmlInputCheckBox)item.FindControl("chkUpdate");
                        chkDelete = (HtmlInputCheckBox)item.FindControl("chkDelete");

                        objNivelAcessoModulo = operaNivelAcessoModulo.buscar(objModulo, objNivelAcesso.CodNivelAcesso);
                        objNivelAcessoModulo.Read = chkRead.Checked;
                        objNivelAcessoModulo.Create = chkCreate.Checked;
                        objNivelAcessoModulo.Update = chkUpdate.Checked;
                        objNivelAcessoModulo.Delete = chkDelete.Checked;
                        operaNivelAcessoModulo.editar(objNivelAcessoModulo);
                    }


                    Response.Redirect("listagem.aspx?msg=1", false);
                }
                else
                {
                    Response.Redirect("listagem.aspx?msg=2", false);
                }
            }
            else
            {
                objNivelAcesso = new projetoFinal.nivelAcesso(0, txtDescricao.Value);
                //Inclusão
                int cont = operaNivelAcesso.incluir(objNivelAcesso);
                if (cont > 0)
                {
                    modulo objModulo = null;
                    objNivelAcesso = operaNivelAcesso.listar("descr", txtDescricao.Value, 1)[0];
                    nivelAcessoModulo objNivelAcessoModulo = null;

                    HtmlInputCheckBox chkRead = null;
                    HtmlInputCheckBox chkCreate = null;
                    HtmlInputCheckBox chkUpdate = null;
                    HtmlInputCheckBox chkDelete = null;

                    foreach (DataListItem item in tblListagem.Items)
                    {
                        objModulo = operaModulo.buscar(Int64.Parse(((HtmlInputHidden)item.FindControl("hdnModulo")).Value));

                        chkRead = (HtmlInputCheckBox)item.FindControl("chkRead");
                        chkCreate = (HtmlInputCheckBox)item.FindControl("chkCreate");
                        chkUpdate = (HtmlInputCheckBox)item.FindControl("chkUpdate");
                        chkDelete = (HtmlInputCheckBox)item.FindControl("chkDelete");


                        objNivelAcessoModulo = new nivelAcessoModulo(0, objNivelAcesso, objModulo, chkCreate.Checked, chkRead.Checked, chkUpdate.Checked, chkDelete.Checked);
                        operaNivelAcessoModulo.incluir(objNivelAcessoModulo);
                    }
                    Response.Redirect("listagem.aspx?msg=3", false);
                }
                else
                {
                    Response.Redirect("listagem.aspx?msg=4", false);
                }
            }
        }
    }
}